package com.itany.corejava.code02_运算符;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年10月24日 9:59
 */
public class Test09_位运算符 {
    public static void main(String[] args) {


        // &按位与,只有1&1时结果为1,否则结果为0
        int num1=5;//00000000 00000000 00000000 00000101
        int num2=8;//00000000 00000000 00000000 00001000
        System.out.println(5&8);

        // |按位或，只有0|0时结果为0,否则结果为1
        System.out.println(5|8);


        // ~按位非，原值如果是1则返回0,原值如果是0则返回1
        System.out.println(~num1);

        // ^异或,如果两位相同,则结果为0, 否则结果为1
        System.out.println(num1^num2);

        // <<左移，将二进制的所有位都向左移动指定的位数,高位丢弃,低位补0
        System.out.println(num1<<2);

        // >>右移，将二进制的所有位都向右移动指定的位数,低位丢弃, 高位补符号位,正数都补0,负数都补1
        System.out.println(num1>>2);

        System.out.println(-8>>2);

        // >>>无符号右移，与右移的区别在于负数的运算,不管正数,高位均补0
        System.out.println(-8>>>2);
    }
}
